mybatis 的SQL日志级别调整方法

您所在的位置:网站首页 mybatis log4j输出SQL yml mybatis 的SQL日志级别调整方法

mybatis 的SQL日志级别调整方法

2024-07-16 18:48:14| 来源: 网络整理| 查看: 265

问题描述

在 Spring Cloud 项目中,生产环境需要打印mybatis的sql语句日志,但是mybatis打印的sql的默认日志级别是[debug],如果生产环境想看到sql语句,就必须开启[debug]级别的日志打印,这样做debug日志量过大,显然不可行。

如下绿色方案是我抄来的,但在我工程里没生效,最后我自己尝试在此基础上新研究的蓝色方法 解决思路 Spring Boot 中通过logback打印 mybatis的sql语句日志,并自定义日志输出实现将sql语句[debug]日志级别上升到[info]日志级别 解决方案 1. 常用的mybatis 日志输出是由org.apache.ibatis.logging.stdout.StdOutImpl控制的

根据StdOutImpl.java可看出日志都是System.out.println(s);的控制台输出,配置及源码如下:

application.xml配置: mybatis: type-aliases-package: com.jiafupeng.mapper mapper-locations: classpath:mapper/**/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出日志 StdOutImpl .java源码如下: public class StdOutImpl implements Log { public StdOutImpl(String clazz) { // Do Nothing } @Override public boolean isDebugEnabled() { return true; } @Override public boolean isTraceEnabled() { return true; } @Override public void error(String s, Throwable e) { System.err.println(s); e.printStackTrace(System.err); } @Override public void error(String s) { System.err.println(s); } @Override public void debug(String s) { System.out.println(s); } @Override public void trace(String s) { System.out.println(s); } @Override public void warn(String s) { System.out.println(s); } } 2. 要想改变mybatis sql语句输出内容级别,则只需自定义Log实现类,重写mybatis sql打印方式及级别。代码如下 application.xml mybatis: type-aliases-package: com.jiafupeng.mapper mapper-locations: classpath:mapper/**/*.xml configuration: log-impl: com.***.***.MySlf4jImpl # mybatis自定义日志输出实现类 并将[debug]日志输出成[info]日志 MySlf4jImpl.java @Slf4j public class MySlf4jImpl implements Log { public MySlf4jImpl(String clazz) { // Do Nothing } @Override public boolean isDebugEnabled() { // return log.isDebugEnabled(); // 将debug级别输出权限改成info级别 return log.isInfoEnabled(); } ... @Override public void debug(String s) { // log.debug(s); // debug日志输出成info级别日志 log.info(s); } ... } 3. 指定logback的日志级别为info,也可在[info]级别日志中查看mybatis 的 sql语句。 logback.xml 蓝色方案: 对如上方案稍加修改: 概述:

由于我工程里用的是多数据源,在整合mybatis时,每个数据源的注册类都自行扫描mapper接口和**Mapper.xml文件,所以我将application.yml中增加的关于mybatis的相关配置恢复到修改前的状态,然后在resource的对应mapper目录中加入mybatis-config.xml,并且在注册数据源中将此文件注册进去,并且在mybatis-config.xml中加入相应配置后,mybatis的SQL日志就以INFO的方式打印出来了。

方案详述如下: 1. 将application.yml中增加的关于mybatis的相关配置恢复到修改前的状态

        注意,如果您的工程是单数据源,直接留用application.yml中增加的关于mybatis的相关配置即可。

2. 在resource/mapper/下适当的位置增加mybatis当前数据源的全局配置文件mybatis-config.xml

        如果您工程里已有此文件,请忽略此操作。

3. 在数据源注册类中增加mybatis-config.xml对应描述代码

        如果您工程里已有此文件,请忽略此操作。

@Data @Configuration @MapperScan(basePackages = MyDruidDatasrouceConfig.PACKAGE, sqlSessionFactoryRef = "mySqlSessionFactory") @Slf4j public class MyDruidDatasrouceConfig { ...... static final String CONFIG_LOCATION = "classpath:mapper/mybatis-config.xml"; ...... @Primary @Bean(name = "myDruidDatasrouceConfig ") public SqlSessionFactory mySqlSessionFactory(@Qualifier("myDruidDataSource") DataSource myDataSource) throws Exception { ...... sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(CONFIG_LOCATION)); return sessionFactory.getObject(); } 4. 在mybatis-config.xml中增加如下配置:

        直接将日志实现类加到mybatis-config.xml配置里即可。

...... ...... 至此,齐活儿!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭